// $ANTLR 3.5 /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g 2013-10-09 16:18:54

package parsing;

import util.*;
import ast.*;
import ast.Process;
import java.util.ArrayList;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class DQCParser extends Parser {
	public static final String[] tokenNames = new String[] {
		"<invalid>", "<EOR>", "<DOWN>", "<UP>", "ID", "NUM", "WS", "'!'", "'&&'", 
		"'&'", "'('", "')'", "'*'", "'+'", "','", "'->'", "'.'", "'0'", "':'", 
		"';'", "'<-'", "'>'", "'?'", "'@'", "'Ch'", "'Dt'", "'Pr'", "'St'", "'_'", 
		"'a'", "'acts_for'", "'as'", "'assert'", "'case'", "'define'", "'dummy'", 
		"'e'", "'else'", "'endorse'", "'ext'", "'go'", "'in'", "'int'", "'is'", 
		"'new'", "'none'", "'of'", "'some'", "'using'", "'with_fun'", "'with_ph'", 
		"'{'", "'|'", "'||'", "'}'"
	};
	public static final int EOF=-1;
	public static final int T__7=7;
	public static final int T__8=8;
	public static final int T__9=9;
	public static final int T__10=10;
	public static final int T__11=11;
	public static final int T__12=12;
	public static final int T__13=13;
	public static final int T__14=14;
	public static final int T__15=15;
	public static final int T__16=16;
	public static final int T__17=17;
	public static final int T__18=18;
	public static final int T__19=19;
	public static final int T__20=20;
	public static final int T__21=21;
	public static final int T__22=22;
	public static final int T__23=23;
	public static final int T__24=24;
	public static final int T__25=25;
	public static final int T__26=26;
	public static final int T__27=27;
	public static final int T__28=28;
	public static final int T__29=29;
	public static final int T__30=30;
	public static final int T__31=31;
	public static final int T__32=32;
	public static final int T__33=33;
	public static final int T__34=34;
	public static final int T__35=35;
	public static final int T__36=36;
	public static final int T__37=37;
	public static final int T__38=38;
	public static final int T__39=39;
	public static final int T__40=40;
	public static final int T__41=41;
	public static final int T__42=42;
	public static final int T__43=43;
	public static final int T__44=44;
	public static final int T__45=45;
	public static final int T__46=46;
	public static final int T__47=47;
	public static final int T__48=48;
	public static final int T__49=49;
	public static final int T__50=50;
	public static final int T__51=51;
	public static final int T__52=52;
	public static final int T__53=53;
	public static final int T__54=54;
	public static final int ID=4;
	public static final int NUM=5;
	public static final int WS=6;

	// delegates
	public Parser[] getDelegates() {
		return new Parser[] {};
	}

	// delegators


	public DQCParser(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public DQCParser(TokenStream input, RecognizerSharedState state) {
		super(input, state);
	}

	@Override public String[] getTokenNames() { return DQCParser.tokenNames; }
	@Override public String getGrammarFileName() { return "/Users/lixm/ecworkspace/DQC/src/parsing/DQC.g"; }



	// $ANTLR start "system"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:20:1: system returns [DQCSystem value] : 'define' (pd= procedure_def )* 'in' n= parallel_network 'using' '(' il= idtp_list ')' ',' '(' id_list ')' 'with_ph' afl= af_list ( 'with_fun' fsd= fun_sig_def ( ';' fsd= fun_sig_def )* )? EOF ;
	public final DQCSystem system() throws RecognitionException {
		DQCSystem value = null;


		Procedure pd =null;
		Network n =null;
		ArrayList<Constant> il =null;
		ArrayList<Pair<String,String>> afl =null;
		Function fsd =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:21:5: ( 'define' (pd= procedure_def )* 'in' n= parallel_network 'using' '(' il= idtp_list ')' ',' '(' id_list ')' 'with_ph' afl= af_list ( 'with_fun' fsd= fun_sig_def ( ';' fsd= fun_sig_def )* )? EOF )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:21:7: 'define' (pd= procedure_def )* 'in' n= parallel_network 'using' '(' il= idtp_list ')' ',' '(' id_list ')' 'with_ph' afl= af_list ( 'with_fun' fsd= fun_sig_def ( ';' fsd= fun_sig_def )* )? EOF
			{
			match(input,34,FOLLOW_34_in_system47); 
			ArrayList<Procedure> lst = new ArrayList<Procedure>();
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:21:73: (pd= procedure_def )*
			loop1:
			while (true) {
				int alt1=2;
				int LA1_0 = input.LA(1);
				if ( (LA1_0==ID) ) {
					alt1=1;
				}

				switch (alt1) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:21:74: pd= procedure_def
					{
					pushFollow(FOLLOW_procedure_def_in_system56);
					pd=procedure_def();
					state._fsp--;

					lst.add(pd);
					}
					break;

				default :
					break loop1;
				}
			}

			match(input,41,FOLLOW_41_in_system62); 
			pushFollow(FOLLOW_parallel_network_in_system68);
			n=parallel_network();
			state._fsp--;

			match(input,48,FOLLOW_48_in_system70); 
			match(input,10,FOLLOW_10_in_system72); 
			pushFollow(FOLLOW_idtp_list_in_system78);
			il=idtp_list();
			state._fsp--;

			match(input,11,FOLLOW_11_in_system80); 
			match(input,14,FOLLOW_14_in_system82); 
			match(input,10,FOLLOW_10_in_system84); 
			pushFollow(FOLLOW_id_list_in_system86);
			id_list();
			state._fsp--;

			match(input,11,FOLLOW_11_in_system88); 
			match(input,50,FOLLOW_50_in_system97); 
			pushFollow(FOLLOW_af_list_in_system103);
			afl=af_list();
			state._fsp--;

			ArrayList<Function> fl = new ArrayList<Function>();
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:23:4: ( 'with_fun' fsd= fun_sig_def ( ';' fsd= fun_sig_def )* )?
			int alt3=2;
			int LA3_0 = input.LA(1);
			if ( (LA3_0==49) ) {
				alt3=1;
			}
			switch (alt3) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:23:5: 'with_fun' fsd= fun_sig_def ( ';' fsd= fun_sig_def )*
					{
					match(input,49,FOLLOW_49_in_system111); 
					pushFollow(FOLLOW_fun_sig_def_in_system115);
					fsd=fun_sig_def();
					state._fsp--;

					fl.add(fsd);
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:24:6: ( ';' fsd= fun_sig_def )*
					loop2:
					while (true) {
						int alt2=2;
						int LA2_0 = input.LA(1);
						if ( (LA2_0==19) ) {
							alt2=1;
						}

						switch (alt2) {
						case 1 :
							// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:24:7: ';' fsd= fun_sig_def
							{
							match(input,19,FOLLOW_19_in_system125); 
							pushFollow(FOLLOW_fun_sig_def_in_system129);
							fsd=fun_sig_def();
							state._fsp--;

							fl.add(fsd);
							}
							break;

						default :
							break loop2;
						}
					}

					}
					break;

			}

			value = new DQCSystem(lst, n, il, afl, fl);
			match(input,EOF,FOLLOW_EOF_in_system146); 
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "system"



	// $ANTLR start "fun_sig_def"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:29:1: fun_sig_def returns [Function value] : ID ':' s= srt ( ',' s= srt )* '->' s2= srt 'is' d= def ;
	public final Function fun_sig_def() throws RecognitionException {
		Function value = null;


		Token ID1=null;
		String s =null;
		String s2 =null;
		ArrayList<Pair<ArrayList<String>, String>> d =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:30:2: ( ID ':' s= srt ( ',' s= srt )* '->' s2= srt 'is' d= def )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:30:4: ID ':' s= srt ( ',' s= srt )* '->' s2= srt 'is' d= def
			{
			ID1=(Token)match(input,ID,FOLLOW_ID_in_fun_sig_def166); 
			match(input,18,FOLLOW_18_in_fun_sig_def168); 
			pushFollow(FOLLOW_srt_in_fun_sig_def172);
			s=srt();
			state._fsp--;

			ArrayList<String> sl = new ArrayList<String>();
					   sl.add(s);
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:33:5: ( ',' s= srt )*
			loop4:
			while (true) {
				int alt4=2;
				int LA4_0 = input.LA(1);
				if ( (LA4_0==14) ) {
					alt4=1;
				}

				switch (alt4) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:33:6: ',' s= srt
					{
					match(input,14,FOLLOW_14_in_fun_sig_def187); 
					pushFollow(FOLLOW_srt_in_fun_sig_def191);
					s=srt();
					state._fsp--;

					sl.add(s);
					}
					break;

				default :
					break loop4;
				}
			}

			match(input,15,FOLLOW_15_in_fun_sig_def197); 
			pushFollow(FOLLOW_srt_in_fun_sig_def201);
			s2=srt();
			state._fsp--;

			Pair<ArrayList<String>,String> p1 = new Pair<ArrayList<String>,String>(sl, s2);
			match(input,43,FOLLOW_43_in_fun_sig_def215); 
			pushFollow(FOLLOW_def_in_fun_sig_def219);
			d=def();
			state._fsp--;

			value = new Function(ID1.getText(), p1, d);
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "fun_sig_def"



	// $ANTLR start "def"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:38:1: def returns [ArrayList<Pair<ArrayList<String>, String>> value] : il= id_list '->' id1= ID ( ',' il2= id_list '->' id2= ID )* ;
	public final ArrayList<Pair<ArrayList<String>, String>> def() throws RecognitionException {
		ArrayList<Pair<ArrayList<String>, String>> value = null;


		Token id1=null;
		Token id2=null;
		ArrayList<String> il =null;
		ArrayList<String> il2 =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:39:2: (il= id_list '->' id1= ID ( ',' il2= id_list '->' id2= ID )* )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:39:4: il= id_list '->' id1= ID ( ',' il2= id_list '->' id2= ID )*
			{
			pushFollow(FOLLOW_id_list_in_def238);
			il=id_list();
			state._fsp--;

			match(input,15,FOLLOW_15_in_def240); 
			id1=(Token)match(input,ID,FOLLOW_ID_in_def244); 
			value = new ArrayList<Pair<ArrayList<String>, String>>();
				 value.add(new Pair(il, id1.getText()));
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:42:2: ( ',' il2= id_list '->' id2= ID )*
			loop5:
			while (true) {
				int alt5=2;
				int LA5_0 = input.LA(1);
				if ( (LA5_0==14) ) {
					alt5=1;
				}

				switch (alt5) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:42:3: ',' il2= id_list '->' id2= ID
					{
					match(input,14,FOLLOW_14_in_def252); 
					pushFollow(FOLLOW_id_list_in_def256);
					il2=id_list();
					state._fsp--;

					match(input,15,FOLLOW_15_in_def258); 
					id2=(Token)match(input,ID,FOLLOW_ID_in_def262); 
					value.add(new Pair(il2,id2.getText()));
					}
					break;

				default :
					break loop5;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "def"



	// $ANTLR start "srt"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:45:1: srt returns [String value] : ( 'Ch' | 'Dt' | 'Pr' | 'St' );
	public final String srt() throws RecognitionException {
		String value = null;


		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:46:2: ( 'Ch' | 'Dt' | 'Pr' | 'St' )
			int alt6=4;
			switch ( input.LA(1) ) {
			case 24:
				{
				alt6=1;
				}
				break;
			case 25:
				{
				alt6=2;
				}
				break;
			case 26:
				{
				alt6=3;
				}
				break;
			case 27:
				{
				alt6=4;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 6, 0, input);
				throw nvae;
			}
			switch (alt6) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:46:4: 'Ch'
					{
					match(input,24,FOLLOW_24_in_srt281); 
					value = "Ch";
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:47:4: 'Dt'
					{
					match(input,25,FOLLOW_25_in_srt288); 
					value = "Dt";
					}
					break;
				case 3 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:48:4: 'Pr'
					{
					match(input,26,FOLLOW_26_in_srt295); 
					value = "Pr";
					}
					break;
				case 4 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:49:4: 'St'
					{
					match(input,27,FOLLOW_27_in_srt302); 
					value = "St";
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "srt"



	// $ANTLR start "af_list"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:52:1: af_list returns [ArrayList<Pair<String,String>> value] : (|id1= ID '>' id2= ID ( ',' id3= ID '>' id4= ID )* );
	public final ArrayList<Pair<String,String>> af_list() throws RecognitionException {
		ArrayList<Pair<String,String>> value = null;


		Token id1=null;
		Token id2=null;
		Token id3=null;
		Token id4=null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:53:3: (|id1= ID '>' id2= ID ( ',' id3= ID '>' id4= ID )* )
			int alt8=2;
			int LA8_0 = input.LA(1);
			if ( (LA8_0==EOF||LA8_0==49) ) {
				alt8=1;
			}
			else if ( (LA8_0==ID) ) {
				alt8=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 8, 0, input);
				throw nvae;
			}

			switch (alt8) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:53:3: 
					{
					value = new ArrayList<Pair<String,String>>();
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:54:3: id1= ID '>' id2= ID ( ',' id3= ID '>' id4= ID )*
					{
					id1=(Token)match(input,ID,FOLLOW_ID_in_af_list326); 
					match(input,21,FOLLOW_21_in_af_list328); 
					id2=(Token)match(input,ID,FOLLOW_ID_in_af_list334); 
					value = new ArrayList<Pair<String,String>>();
						 value.add(new Pair<String,String>(id1.getText(), id2.getText()));
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:57:2: ( ',' id3= ID '>' id4= ID )*
					loop7:
					while (true) {
						int alt7=2;
						int LA7_0 = input.LA(1);
						if ( (LA7_0==14) ) {
							alt7=1;
						}

						switch (alt7) {
						case 1 :
							// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:57:2: ',' id3= ID '>' id4= ID
							{
							match(input,14,FOLLOW_14_in_af_list341); 
							id3=(Token)match(input,ID,FOLLOW_ID_in_af_list347); 
							match(input,21,FOLLOW_21_in_af_list349); 
							id4=(Token)match(input,ID,FOLLOW_ID_in_af_list355); 
							value.add(new Pair<String,String>(id3.getText(), id4.getText()));
							}
							break;

						default :
							break loop7;
						}
					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "af_list"



	// $ANTLR start "idtp_list"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:60:1: idtp_list returns [ArrayList<Constant> value] : (|id1= ID ':' t= tp ( ',' id2= ID ':' t= tp )* );
	public final ArrayList<Constant> idtp_list() throws RecognitionException {
		ArrayList<Constant> value = null;


		Token id1=null;
		Token id2=null;
		Type t =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:61:5: (|id1= ID ':' t= tp ( ',' id2= ID ':' t= tp )* )
			int alt10=2;
			int LA10_0 = input.LA(1);
			if ( (LA10_0==11) ) {
				alt10=1;
			}
			else if ( (LA10_0==ID) ) {
				alt10=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 10, 0, input);
				throw nvae;
			}

			switch (alt10) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:61:5: 
					{
					value = new ArrayList<Constant>();
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:62:5: id1= ID ':' t= tp ( ',' id2= ID ':' t= tp )*
					{
					value = new ArrayList<Constant>();
					id1=(Token)match(input,ID,FOLLOW_ID_in_idtp_list388); 
					match(input,18,FOLLOW_18_in_idtp_list390); 
					pushFollow(FOLLOW_tp_in_idtp_list394);
					t=tp();
					state._fsp--;


							if (t instanceof Data) {
								value.add(new DataConstant(id1.getText()));
							} else {
								value.add(new ChannelConstant(id1.getText(), t));
							}
						
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:71:2: ( ',' id2= ID ':' t= tp )*
					loop9:
					while (true) {
						int alt9=2;
						int LA9_0 = input.LA(1);
						if ( (LA9_0==14) ) {
							alt9=1;
						}

						switch (alt9) {
						case 1 :
							// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:71:3: ',' id2= ID ':' t= tp
							{
							match(input,14,FOLLOW_14_in_idtp_list402); 
							id2=(Token)match(input,ID,FOLLOW_ID_in_idtp_list408); 
							match(input,18,FOLLOW_18_in_idtp_list410); 
							pushFollow(FOLLOW_tp_in_idtp_list414);
							t=tp();
							state._fsp--;


									if (t instanceof Data) {
										value.add(new DataConstant(id2.getText()));
									} else {
										value.add(new ChannelConstant(id2.getText(), t));
									}
								
							}
							break;

						default :
							break loop9;
						}
					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "idtp_list"



	// $ANTLR start "procedure_def"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:82:1: procedure_def returns [Procedure value] : id1= ID cl= comp_label '@' id2= ID '(' il= id_list ')' 'as' p= parallel_process ;
	public final Procedure procedure_def() throws RecognitionException {
		Procedure value = null;


		Token id1=null;
		Token id2=null;
		Label cl =null;
		ArrayList<String> il =null;
		ParallelProcess p =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:83:5: (id1= ID cl= comp_label '@' id2= ID '(' il= id_list ')' 'as' p= parallel_process )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:83:7: id1= ID cl= comp_label '@' id2= ID '(' il= id_list ')' 'as' p= parallel_process
			{
			id1=(Token)match(input,ID,FOLLOW_ID_in_procedure_def443); 
			pushFollow(FOLLOW_comp_label_in_procedure_def447);
			cl=comp_label();
			state._fsp--;

			match(input,23,FOLLOW_23_in_procedure_def449); 
			id2=(Token)match(input,ID,FOLLOW_ID_in_procedure_def455); 
			match(input,10,FOLLOW_10_in_procedure_def457); 
			pushFollow(FOLLOW_id_list_in_procedure_def463);
			il=id_list();
			state._fsp--;

			match(input,11,FOLLOW_11_in_procedure_def465); 
			match(input,31,FOLLOW_31_in_procedure_def467); 
			pushFollow(FOLLOW_parallel_process_in_procedure_def473);
			p=parallel_process();
			state._fsp--;

			value = new Procedure(id1.getText(), new Site(id2.getText()), il, p, cl);
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "procedure_def"



	// $ANTLR start "parallel_network"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:87:1: parallel_network returns [Network value] : n= network ( '|' n= network )* ;
	public final Network parallel_network() throws RecognitionException {
		Network value = null;


		Network n =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:88:2: (n= network ( '|' n= network )* )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:88:4: n= network ( '|' n= network )*
			{
			pushFollow(FOLLOW_network_in_parallel_network502);
			n=network();
			state._fsp--;

			ArrayList<Network> lst = new ArrayList<Network>(); lst.add(n);
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:89:3: ( '|' n= network )*
			loop11:
			while (true) {
				int alt11=2;
				int LA11_0 = input.LA(1);
				if ( (LA11_0==52) ) {
					alt11=1;
				}

				switch (alt11) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:89:4: '|' n= network
					{
					match(input,52,FOLLOW_52_in_parallel_network509); 
					pushFollow(FOLLOW_network_in_parallel_network515);
					n=network();
					state._fsp--;

					lst.add(n);
					}
					break;

				default :
					break loop11;
				}
			}

			value = new ParallelNetwork(lst);
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "parallel_network"



	// $ANTLR start "network"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:92:1: network returns [Network value] : ( '(' '@' ID ')' '(' p= parallel_process ')' | '(' 'new' ID ':' t= tp ')' '(' n= parallel_network ')' );
	public final Network network() throws RecognitionException {
		Network value = null;


		Token ID2=null;
		Token ID3=null;
		ParallelProcess p =null;
		Type t =null;
		Network n =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:93:5: ( '(' '@' ID ')' '(' p= parallel_process ')' | '(' 'new' ID ':' t= tp ')' '(' n= parallel_network ')' )
			int alt12=2;
			int LA12_0 = input.LA(1);
			if ( (LA12_0==10) ) {
				int LA12_1 = input.LA(2);
				if ( (LA12_1==23) ) {
					alt12=1;
				}
				else if ( (LA12_1==44) ) {
					alt12=2;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 12, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 12, 0, input);
				throw nvae;
			}

			switch (alt12) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:93:7: '(' '@' ID ')' '(' p= parallel_process ')'
					{
					match(input,10,FOLLOW_10_in_network541); 
					match(input,23,FOLLOW_23_in_network543); 
					ID2=(Token)match(input,ID,FOLLOW_ID_in_network545); 
					match(input,11,FOLLOW_11_in_network547); 
					match(input,10,FOLLOW_10_in_network549); 
					pushFollow(FOLLOW_parallel_process_in_network555);
					p=parallel_process();
					state._fsp--;

					value = new ProcessAtSite(new Site(ID2.getText()), p); 
					match(input,11,FOLLOW_11_in_network559); 
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:94:4: '(' 'new' ID ':' t= tp ')' '(' n= parallel_network ')'
					{
					match(input,10,FOLLOW_10_in_network564); 
					match(input,44,FOLLOW_44_in_network566); 
					ID3=(Token)match(input,ID,FOLLOW_ID_in_network568); 
					match(input,18,FOLLOW_18_in_network570); 
					pushFollow(FOLLOW_tp_in_network576);
					t=tp();
					state._fsp--;

					match(input,11,FOLLOW_11_in_network578); 
					match(input,10,FOLLOW_10_in_network580); 
					pushFollow(FOLLOW_parallel_network_in_network586);
					n=parallel_network();
					state._fsp--;

					match(input,11,FOLLOW_11_in_network588); 

						  	if (t instanceof Data) {
						  		value = new NewConstN(new DataConstant(ID3.getText()), n);
						  	} else {
						  		value = new NewConstN(new ChannelConstant(ID3.getText(), t), n);
						  	}
						  
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "network"



	// $ANTLR start "comp_label"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:104:1: comp_label returns [Label value] : lc= label_conjunction ( '+' lc= label_conjunction )* ;
	public final Label comp_label() throws RecognitionException {
		Label value = null;


		Label lc =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:105:2: (lc= label_conjunction ( '+' lc= label_conjunction )* )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:105:4: lc= label_conjunction ( '+' lc= label_conjunction )*
			{
			pushFollow(FOLLOW_label_conjunction_in_comp_label613);
			lc=label_conjunction();
			state._fsp--;

			ArrayList<Label> lst = new ArrayList<Label>(); lst.add(lc);
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:105:89: ( '+' lc= label_conjunction )*
			loop13:
			while (true) {
				int alt13=2;
				int LA13_0 = input.LA(1);
				if ( (LA13_0==13) ) {
					alt13=1;
				}

				switch (alt13) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:105:90: '+' lc= label_conjunction
					{
					match(input,13,FOLLOW_13_in_comp_label618); 
					pushFollow(FOLLOW_label_conjunction_in_comp_label624);
					lc=label_conjunction();
					state._fsp--;

					lst.add(lc);
					}
					break;

				default :
					break loop13;
				}
			}

			value = new LabelDisjunction(lst);
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "comp_label"



	// $ANTLR start "label_conjunction"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:108:1: label_conjunction returns [Label value] : l= label ( '*' l= label )* ;
	public final Label label_conjunction() throws RecognitionException {
		Label value = null;


		Label l =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:109:2: (l= label ( '*' l= label )* )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:109:4: l= label ( '*' l= label )*
			{
			pushFollow(FOLLOW_label_in_label_conjunction650);
			l=label();
			state._fsp--;

			ArrayList<Label> lst = new ArrayList<Label>(); lst.add(l);
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:110:3: ( '*' l= label )*
			loop14:
			while (true) {
				int alt14=2;
				int LA14_0 = input.LA(1);
				if ( (LA14_0==12) ) {
					alt14=1;
				}

				switch (alt14) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:110:4: '*' l= label
					{
					match(input,12,FOLLOW_12_in_label_conjunction658); 
					pushFollow(FOLLOW_label_in_label_conjunction664);
					l=label();
					state._fsp--;

					lst.add(l);
					}
					break;

				default :
					break loop14;
				}
			}

			value = new LabelConjunction(lst);
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "label_conjunction"



	// $ANTLR start "label"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:113:1: label returns [Label value] : ( '{' t= term '<-' il= trm_list '}' | '(' cl= comp_label ')' );
	public final Label label() throws RecognitionException {
		Label value = null;


		Term t =null;
		ArrayList<Term> il =null;
		Label cl =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:114:5: ( '{' t= term '<-' il= trm_list '}' | '(' cl= comp_label ')' )
			int alt15=2;
			int LA15_0 = input.LA(1);
			if ( (LA15_0==51) ) {
				alt15=1;
			}
			else if ( (LA15_0==10) ) {
				alt15=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 15, 0, input);
				throw nvae;
			}

			switch (alt15) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:114:7: '{' t= term '<-' il= trm_list '}'
					{
					match(input,51,FOLLOW_51_in_label689); 
					pushFollow(FOLLOW_term_in_label693);
					t=term();
					state._fsp--;

					match(input,20,FOLLOW_20_in_label695); 
					pushFollow(FOLLOW_trm_list_in_label701);
					il=trm_list();
					state._fsp--;

					match(input,54,FOLLOW_54_in_label703); 
					value = new AtomicLabel(t, il);
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:115:7: '(' cl= comp_label ')'
					{
					match(input,10,FOLLOW_10_in_label713); 
					pushFollow(FOLLOW_comp_label_in_label719);
					cl=comp_label();
					state._fsp--;

					match(input,11,FOLLOW_11_in_label721); 
					value = cl;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "label"



	// $ANTLR start "parallel_process"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:118:1: parallel_process returns [ParallelProcess value] : p= process ( '|' p= process )* ;
	public final ParallelProcess parallel_process() throws RecognitionException {
		ParallelProcess value = null;


		Process p =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:119:5: (p= process ( '|' p= process )* )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:119:7: p= process ( '|' p= process )*
			{
			pushFollow(FOLLOW_process_in_parallel_process748);
			p=process();
			state._fsp--;

			ArrayList<Process> lst = new ArrayList<Process>(); lst.add(p);
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:119:85: ( '|' p= process )*
			loop16:
			while (true) {
				int alt16=2;
				int LA16_0 = input.LA(1);
				if ( (LA16_0==52) ) {
					alt16=1;
				}

				switch (alt16) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:119:86: '|' p= process
					{
					match(input,52,FOLLOW_52_in_parallel_process754); 
					pushFollow(FOLLOW_process_in_parallel_process760);
					p=process();
					state._fsp--;

					lst.add(p);
					}
					break;

				default :
					break loop16;
				}
			}

			value = new ParallelProcess(lst);
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "parallel_process"



	// $ANTLR start "process"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:122:1: process returns [Process value] : ( '0' | '(' 'new' ID ':' typ= tp ')' '(' p= parallel_process ')' | 'go' '(' t= term ')' '.' p= parallel_process | 'dummy' '(' p= parallel_process ')' |b= binder '.' p= parallel_process | 'case' e= exp 'of' 'some' '(' ID ')' ':' p1= parallel_process 'else' p2= parallel_process | 'acts_for' '(' t1= term ',' t2= term ')' ':' p1= parallel_process 'else' p2= parallel_process | ID '(' el= exp_list ')' | '(' p= parallel_process ')' );
	public final Process process() throws RecognitionException {
		Process value = null;


		Token ID4=null;
		Token ID5=null;
		Token ID6=null;
		Type typ =null;
		ParallelProcess p =null;
		Term t =null;
		Binder b =null;
		Expression e =null;
		ParallelProcess p1 =null;
		ParallelProcess p2 =null;
		Term t1 =null;
		Term t2 =null;
		ArrayList<Expression> el =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:123:5: ( '0' | '(' 'new' ID ':' typ= tp ')' '(' p= parallel_process ')' | 'go' '(' t= term ')' '.' p= parallel_process | 'dummy' '(' p= parallel_process ')' |b= binder '.' p= parallel_process | 'case' e= exp 'of' 'some' '(' ID ')' ':' p1= parallel_process 'else' p2= parallel_process | 'acts_for' '(' t1= term ',' t2= term ')' ':' p1= parallel_process 'else' p2= parallel_process | ID '(' el= exp_list ')' | '(' p= parallel_process ')' )
			int alt17=9;
			alt17 = dfa17.predict(input);
			switch (alt17) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:123:7: '0'
					{
					match(input,17,FOLLOW_17_in_process792); 
					value = new Zero();
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:124:7: '(' 'new' ID ':' typ= tp ')' '(' p= parallel_process ')'
					{
					match(input,10,FOLLOW_10_in_process802); 
					match(input,44,FOLLOW_44_in_process804); 
					ID4=(Token)match(input,ID,FOLLOW_ID_in_process806); 
					match(input,18,FOLLOW_18_in_process808); 
					pushFollow(FOLLOW_tp_in_process812);
					typ=tp();
					state._fsp--;

					match(input,11,FOLLOW_11_in_process814); 
					match(input,10,FOLLOW_10_in_process816); 
					pushFollow(FOLLOW_parallel_process_in_process820);
					p=parallel_process();
					state._fsp--;

					match(input,11,FOLLOW_11_in_process822); 
					 
						  	if (typ instanceof Data) {
								value = new NewConstP(new DataConstant(ID4.getText()), p);
							} else {
								value = new NewConstP(new ChannelConstant(ID4.getText(), typ), p);
							}
						  
					}
					break;
				case 3 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:132:7: 'go' '(' t= term ')' '.' p= parallel_process
					{
					match(input,40,FOLLOW_40_in_process835); 
					match(input,10,FOLLOW_10_in_process837); 
					pushFollow(FOLLOW_term_in_process843);
					t=term();
					state._fsp--;

					match(input,11,FOLLOW_11_in_process845); 
					match(input,16,FOLLOW_16_in_process847); 
					pushFollow(FOLLOW_parallel_process_in_process853);
					p=parallel_process();
					state._fsp--;

					value = new Go(t, p);
					}
					break;
				case 4 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:133:7: 'dummy' '(' p= parallel_process ')'
					{
					match(input,35,FOLLOW_35_in_process863); 
					match(input,10,FOLLOW_10_in_process865); 
					pushFollow(FOLLOW_parallel_process_in_process871);
					p=parallel_process();
					state._fsp--;

					match(input,11,FOLLOW_11_in_process873); 
					value = new Dummy(p);
					}
					break;
				case 5 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:134:7: b= binder '.' p= parallel_process
					{
					pushFollow(FOLLOW_binder_in_process887);
					b=binder();
					state._fsp--;

					match(input,16,FOLLOW_16_in_process889); 
					pushFollow(FOLLOW_parallel_process_in_process895);
					p=parallel_process();
					state._fsp--;

					value = new PrefixedProcess(b, p);
					}
					break;
				case 6 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:135:7: 'case' e= exp 'of' 'some' '(' ID ')' ':' p1= parallel_process 'else' p2= parallel_process
					{
					match(input,33,FOLLOW_33_in_process905); 
					pushFollow(FOLLOW_exp_in_process911);
					e=exp();
					state._fsp--;

					match(input,46,FOLLOW_46_in_process913); 
					match(input,47,FOLLOW_47_in_process915); 
					match(input,10,FOLLOW_10_in_process917); 
					ID5=(Token)match(input,ID,FOLLOW_ID_in_process919); 
					match(input,11,FOLLOW_11_in_process921); 
					match(input,18,FOLLOW_18_in_process923); 
					pushFollow(FOLLOW_parallel_process_in_process929);
					p1=parallel_process();
					state._fsp--;

					match(input,37,FOLLOW_37_in_process931); 
					pushFollow(FOLLOW_parallel_process_in_process937);
					p2=parallel_process();
					state._fsp--;

					value = new Case(e, new TermVar(ID5.getText()), p1, p2);
					}
					break;
				case 7 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:137:7: 'acts_for' '(' t1= term ',' t2= term ')' ':' p1= parallel_process 'else' p2= parallel_process
					{
					match(input,30,FOLLOW_30_in_process951); 
					match(input,10,FOLLOW_10_in_process953); 
					pushFollow(FOLLOW_term_in_process959);
					t1=term();
					state._fsp--;

					match(input,14,FOLLOW_14_in_process961); 
					pushFollow(FOLLOW_term_in_process967);
					t2=term();
					state._fsp--;

					match(input,11,FOLLOW_11_in_process968); 
					match(input,18,FOLLOW_18_in_process970); 
					pushFollow(FOLLOW_parallel_process_in_process976);
					p1=parallel_process();
					state._fsp--;

					match(input,37,FOLLOW_37_in_process978); 
					pushFollow(FOLLOW_parallel_process_in_process982);
					p2=parallel_process();
					state._fsp--;

					value = new ActsFor(t1, t2, p1, p2);
					}
					break;
				case 8 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:139:7: ID '(' el= exp_list ')'
					{
					ID6=(Token)match(input,ID,FOLLOW_ID_in_process995); 
					match(input,10,FOLLOW_10_in_process997); 
					pushFollow(FOLLOW_exp_list_in_process1003);
					el=exp_list();
					state._fsp--;

					match(input,11,FOLLOW_11_in_process1005); 
					value = new Call(ID6.getText(), el);
					}
					break;
				case 9 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:140:7: '(' p= parallel_process ')'
					{
					match(input,10,FOLLOW_10_in_process1015); 
					pushFollow(FOLLOW_parallel_process_in_process1019);
					p=parallel_process();
					state._fsp--;

					match(input,11,FOLLOW_11_in_process1021); 
					value = p;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "process"



	// $ANTLR start "tp"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:143:1: tp returns [Type value] : ( 'Dt' | 'ext' l= comp_label | 'int' l= comp_label );
	public final Type tp() throws RecognitionException {
		Type value = null;


		Label l =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:144:2: ( 'Dt' | 'ext' l= comp_label | 'int' l= comp_label )
			int alt18=3;
			switch ( input.LA(1) ) {
			case 25:
				{
				alt18=1;
				}
				break;
			case 39:
				{
				alt18=2;
				}
				break;
			case 42:
				{
				alt18=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 18, 0, input);
				throw nvae;
			}
			switch (alt18) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:144:4: 'Dt'
					{
					match(input,25,FOLLOW_25_in_tp1047); 
					value = new Data();
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:145:4: 'ext' l= comp_label
					{
					match(input,39,FOLLOW_39_in_tp1054); 
					pushFollow(FOLLOW_comp_label_in_tp1060);
					l=comp_label();
					state._fsp--;

					l.setExternal(true); value = l;
					}
					break;
				case 3 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:146:4: 'int' l= comp_label
					{
					match(input,42,FOLLOW_42_in_tp1067); 
					pushFollow(FOLLOW_comp_label_in_tp1073);
					l=comp_label();
					state._fsp--;

					l.setExternal(false); value = l;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "tp"



	// $ANTLR start "binder"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:149:1: binder returns [Binder value] : (t= term ( '!' t1= term | '?' ID ) | '&' '_' q= quality_pred '(' bl= binder_list ')' | 'assert' '(' l1= comp_label ',' l2= comp_label ',' b= binder ')' );
	public final Binder binder() throws RecognitionException {
		Binder value = null;


		Token ID7=null;
		Term t =null;
		Term t1 =null;
		QualityPredicate q =null;
		ArrayList<Binder> bl =null;
		Label l1 =null;
		Label l2 =null;
		Binder b =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:150:2: (t= term ( '!' t1= term | '?' ID ) | '&' '_' q= quality_pred '(' bl= binder_list ')' | 'assert' '(' l1= comp_label ',' l2= comp_label ',' b= binder ')' )
			int alt20=3;
			switch ( input.LA(1) ) {
			case ID:
			case 12:
			case 28:
			case 38:
				{
				alt20=1;
				}
				break;
			case 9:
				{
				alt20=2;
				}
				break;
			case 32:
				{
				alt20=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 20, 0, input);
				throw nvae;
			}
			switch (alt20) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:150:4: t= term ( '!' t1= term | '?' ID )
					{
					pushFollow(FOLLOW_term_in_binder1094);
					t=term();
					state._fsp--;

					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:150:13: ( '!' t1= term | '?' ID )
					int alt19=2;
					int LA19_0 = input.LA(1);
					if ( (LA19_0==7) ) {
						alt19=1;
					}
					else if ( (LA19_0==22) ) {
						alt19=2;
					}

					else {
						NoViableAltException nvae =
							new NoViableAltException("", 19, 0, input);
						throw nvae;
					}

					switch (alt19) {
						case 1 :
							// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:150:15: '!' t1= term
							{
							match(input,7,FOLLOW_7_in_binder1098); 
							pushFollow(FOLLOW_term_in_binder1104);
							t1=term();
							state._fsp--;

							value = new Out(t, t1);
							}
							break;
						case 2 :
							// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:151:20: '?' ID
							{
							match(input,22,FOLLOW_22_in_binder1128); 
							ID7=(Token)match(input,ID,FOLLOW_ID_in_binder1130); 
							value = new In(t, new ExpVar(ID7.getText()));
							}
							break;

					}

					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:152:4: '&' '_' q= quality_pred '(' bl= binder_list ')'
					{
					match(input,9,FOLLOW_9_in_binder1139); 
					match(input,28,FOLLOW_28_in_binder1141); 
					pushFollow(FOLLOW_quality_pred_in_binder1147);
					q=quality_pred();
					state._fsp--;

					match(input,10,FOLLOW_10_in_binder1149); 
					pushFollow(FOLLOW_binder_list_in_binder1155);
					bl=binder_list();
					state._fsp--;

					match(input,11,FOLLOW_11_in_binder1157); 
					value = new CompositeBinder(q, bl);
					}
					break;
				case 3 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:154:4: 'assert' '(' l1= comp_label ',' l2= comp_label ',' b= binder ')'
					{
					match(input,32,FOLLOW_32_in_binder1167); 
					match(input,10,FOLLOW_10_in_binder1169); 
					pushFollow(FOLLOW_comp_label_in_binder1175);
					l1=comp_label();
					state._fsp--;

					match(input,14,FOLLOW_14_in_binder1177); 
					pushFollow(FOLLOW_comp_label_in_binder1183);
					l2=comp_label();
					state._fsp--;

					match(input,14,FOLLOW_14_in_binder1185); 
					pushFollow(FOLLOW_binder_in_binder1191);
					b=binder();
					state._fsp--;

					match(input,11,FOLLOW_11_in_binder1193); 
					value = new Assert(b, l1, l2);
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "binder"



	// $ANTLR start "quality_pred"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:158:1: quality_pred returns [QualityPredicate value] : ( 'a' | 'e' |bf= boolean_formula );
	public final QualityPredicate quality_pred() throws RecognitionException {
		QualityPredicate value = null;


		QualityPredicate bf =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:159:2: ( 'a' | 'e' |bf= boolean_formula )
			int alt21=3;
			switch ( input.LA(1) ) {
			case 29:
				{
				alt21=1;
				}
				break;
			case 36:
				{
				alt21=2;
				}
				break;
			case NUM:
			case 10:
				{
				alt21=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 21, 0, input);
				throw nvae;
			}
			switch (alt21) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:159:4: 'a'
					{
					match(input,29,FOLLOW_29_in_quality_pred1212); 
					value = new ForallPredicate();
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:160:4: 'e'
					{
					match(input,36,FOLLOW_36_in_quality_pred1219); 
					value = new ExistsPredicate();
					}
					break;
				case 3 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:161:4: bf= boolean_formula
					{
					pushFollow(FOLLOW_boolean_formula_in_quality_pred1230);
					bf=boolean_formula();
					state._fsp--;

					value = bf;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "quality_pred"



	// $ANTLR start "boolean_formula"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:164:1: boolean_formula returns [QualityPredicate value] : af= and_formula ( '||' af= and_formula )* ;
	public final QualityPredicate boolean_formula() throws RecognitionException {
		QualityPredicate value = null;


		AndPredicate af =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:165:2: (af= and_formula ( '||' af= and_formula )* )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:165:4: af= and_formula ( '||' af= and_formula )*
			{
			pushFollow(FOLLOW_and_formula_in_boolean_formula1251);
			af=and_formula();
			state._fsp--;

			ArrayList<QualityPredicate> lst = new ArrayList<QualityPredicate>(); lst.add(af);
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:167:4: ( '||' af= and_formula )*
			loop22:
			while (true) {
				int alt22=2;
				int LA22_0 = input.LA(1);
				if ( (LA22_0==53) ) {
					alt22=1;
				}

				switch (alt22) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:167:5: '||' af= and_formula
					{
					match(input,53,FOLLOW_53_in_boolean_formula1264); 
					pushFollow(FOLLOW_and_formula_in_boolean_formula1270);
					af=and_formula();
					state._fsp--;

					lst.add(af);
					}
					break;

				default :
					break loop22;
				}
			}

			value = new OrPredicate(lst);
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "boolean_formula"



	// $ANTLR start "and_formula"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:170:1: and_formula returns [AndPredicate value] : af= atom_formula ( '&&' af= atom_formula )* ;
	public final AndPredicate and_formula() throws RecognitionException {
		AndPredicate value = null;


		QualityPredicate af =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:171:2: (af= atom_formula ( '&&' af= atom_formula )* )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:171:4: af= atom_formula ( '&&' af= atom_formula )*
			{
			pushFollow(FOLLOW_atom_formula_in_and_formula1295);
			af=atom_formula();
			state._fsp--;

			ArrayList<QualityPredicate> lst = new ArrayList<QualityPredicate>(); lst.add(af);
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:173:2: ( '&&' af= atom_formula )*
			loop23:
			while (true) {
				int alt23=2;
				int LA23_0 = input.LA(1);
				if ( (LA23_0==8) ) {
					alt23=1;
				}

				switch (alt23) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:173:3: '&&' af= atom_formula
					{
					match(input,8,FOLLOW_8_in_and_formula1306); 
					pushFollow(FOLLOW_atom_formula_in_and_formula1310);
					af=atom_formula();
					state._fsp--;

					lst.add(af);
					}
					break;

				default :
					break loop23;
				}
			}

			value = new AndPredicate(lst);
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "and_formula"



	// $ANTLR start "atom_formula"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:176:1: atom_formula returns [QualityPredicate value] : ( NUM | '(' bf= boolean_formula ')' );
	public final QualityPredicate atom_formula() throws RecognitionException {
		QualityPredicate value = null;


		Token NUM8=null;
		QualityPredicate bf =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:177:2: ( NUM | '(' bf= boolean_formula ')' )
			int alt24=2;
			int LA24_0 = input.LA(1);
			if ( (LA24_0==NUM) ) {
				alt24=1;
			}
			else if ( (LA24_0==10) ) {
				alt24=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 24, 0, input);
				throw nvae;
			}

			switch (alt24) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:177:4: NUM
					{
					NUM8=(Token)match(input,NUM,FOLLOW_NUM_in_atom_formula1331); 
					value = new NumPredicate(Integer.parseInt(NUM8.getText()));
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:178:4: '(' bf= boolean_formula ')'
					{
					match(input,10,FOLLOW_10_in_atom_formula1338); 
					pushFollow(FOLLOW_boolean_formula_in_atom_formula1344);
					bf=boolean_formula();
					state._fsp--;

					match(input,11,FOLLOW_11_in_atom_formula1346); 
					value = bf;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "atom_formula"



	// $ANTLR start "binder_list"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:181:1: binder_list returns [ArrayList<Binder> value] : b= binder ( ',' b= binder )* ;
	public final ArrayList<Binder> binder_list() throws RecognitionException {
		ArrayList<Binder> value = null;


		Binder b =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:182:3: (b= binder ( ',' b= binder )* )
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:182:5: b= binder ( ',' b= binder )*
			{
			pushFollow(FOLLOW_binder_in_binder_list1368);
			b=binder();
			state._fsp--;

			value = new ArrayList<Binder>(); value.add(b);
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:182:67: ( ',' b= binder )*
			loop25:
			while (true) {
				int alt25=2;
				int LA25_0 = input.LA(1);
				if ( (LA25_0==14) ) {
					alt25=1;
				}

				switch (alt25) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:182:68: ',' b= binder
					{
					match(input,14,FOLLOW_14_in_binder_list1373); 
					pushFollow(FOLLOW_binder_in_binder_list1379);
					b=binder();
					state._fsp--;

					value.add(b);
					}
					break;

				default :
					break loop25;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "binder_list"



	// $ANTLR start "exp"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:185:1: exp returns [Expression value] : ( 'some' '(' t= term ')' | 'none' | ID );
	public final Expression exp() throws RecognitionException {
		Expression value = null;


		Token ID9=null;
		Term t =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:186:2: ( 'some' '(' t= term ')' | 'none' | ID )
			int alt26=3;
			switch ( input.LA(1) ) {
			case 47:
				{
				alt26=1;
				}
				break;
			case 45:
				{
				alt26=2;
				}
				break;
			case ID:
				{
				alt26=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 26, 0, input);
				throw nvae;
			}
			switch (alt26) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:186:4: 'some' '(' t= term ')'
					{
					match(input,47,FOLLOW_47_in_exp1399); 
					match(input,10,FOLLOW_10_in_exp1401); 
					pushFollow(FOLLOW_term_in_exp1407);
					t=term();
					state._fsp--;

					match(input,11,FOLLOW_11_in_exp1409); 
					value = new Some(t);
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:187:4: 'none'
					{
					match(input,45,FOLLOW_45_in_exp1416); 
					value = new None();
					}
					break;
				case 3 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:188:4: ID
					{
					ID9=(Token)match(input,ID,FOLLOW_ID_in_exp1423); 
					value = new ExpVar(ID9.getText());
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "exp"



	// $ANTLR start "term"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:191:1: term returns [Term value] : ( ID | ID '(' tl= trm_list ')' | 'endorse' '(' l1= comp_label ',' l2= comp_label ',' t= term ')' | '*' | '_' );
	public final Term term() throws RecognitionException {
		Term value = null;


		Token ID10=null;
		Token ID11=null;
		ArrayList<Term> tl =null;
		Label l1 =null;
		Label l2 =null;
		Term t =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:192:2: ( ID | ID '(' tl= trm_list ')' | 'endorse' '(' l1= comp_label ',' l2= comp_label ',' t= term ')' | '*' | '_' )
			int alt27=5;
			switch ( input.LA(1) ) {
			case ID:
				{
				int LA27_1 = input.LA(2);
				if ( (LA27_1==10) ) {
					alt27=2;
				}
				else if ( (LA27_1==7||LA27_1==11||LA27_1==14||LA27_1==16||LA27_1==20||LA27_1==22||LA27_1==54) ) {
					alt27=1;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 27, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case 38:
				{
				alt27=3;
				}
				break;
			case 12:
				{
				alt27=4;
				}
				break;
			case 28:
				{
				alt27=5;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 27, 0, input);
				throw nvae;
			}
			switch (alt27) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:192:4: ID
					{
					ID10=(Token)match(input,ID,FOLLOW_ID_in_term1441); 
					value = new TermVar(ID10.getText());
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:193:4: ID '(' tl= trm_list ')'
					{
					ID11=(Token)match(input,ID,FOLLOW_ID_in_term1448); 
					match(input,10,FOLLOW_10_in_term1450); 
					pushFollow(FOLLOW_trm_list_in_term1456);
					tl=trm_list();
					state._fsp--;

					match(input,11,FOLLOW_11_in_term1458); 
					value = new FunApp(ID11.getText(), tl);
					}
					break;
				case 3 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:194:4: 'endorse' '(' l1= comp_label ',' l2= comp_label ',' t= term ')'
					{
					match(input,38,FOLLOW_38_in_term1465); 
					match(input,10,FOLLOW_10_in_term1467); 
					pushFollow(FOLLOW_comp_label_in_term1473);
					l1=comp_label();
					state._fsp--;

					match(input,14,FOLLOW_14_in_term1475); 
					pushFollow(FOLLOW_comp_label_in_term1481);
					l2=comp_label();
					state._fsp--;

					match(input,14,FOLLOW_14_in_term1483); 
					pushFollow(FOLLOW_term_in_term1489);
					t=term();
					state._fsp--;

					match(input,11,FOLLOW_11_in_term1491); 
					value = new Endorse(t, l1, l2);
					}
					break;
				case 4 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:196:4: '*'
					{
					match(input,12,FOLLOW_12_in_term1502); 
					value = new TermVar("*");
					}
					break;
				case 5 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:197:4: '_'
					{
					match(input,28,FOLLOW_28_in_term1509); 
					value = new TermVar("_");
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "term"



	// $ANTLR start "trm_list"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:200:1: trm_list returns [ArrayList<Term> value] : (|t= term ( ',' t= term )* );
	public final ArrayList<Term> trm_list() throws RecognitionException {
		ArrayList<Term> value = null;


		Term t =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:201:2: (|t= term ( ',' t= term )* )
			int alt29=2;
			int LA29_0 = input.LA(1);
			if ( (LA29_0==11||LA29_0==54) ) {
				alt29=1;
			}
			else if ( (LA29_0==ID||LA29_0==12||LA29_0==28||LA29_0==38) ) {
				alt29=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 29, 0, input);
				throw nvae;
			}

			switch (alt29) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:201:4: 
					{
					value = new ArrayList<Term>();
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:202:4: t= term ( ',' t= term )*
					{
					pushFollow(FOLLOW_term_in_trm_list1535);
					t=term();
					state._fsp--;

					value = new ArrayList<Term>(); value.add(t);
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:202:62: ( ',' t= term )*
					loop28:
					while (true) {
						int alt28=2;
						int LA28_0 = input.LA(1);
						if ( (LA28_0==14) ) {
							alt28=1;
						}

						switch (alt28) {
						case 1 :
							// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:202:63: ',' t= term
							{
							match(input,14,FOLLOW_14_in_trm_list1540); 
							pushFollow(FOLLOW_term_in_trm_list1544);
							t=term();
							state._fsp--;

							value.add(t);
							}
							break;

						default :
							break loop28;
						}
					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "trm_list"



	// $ANTLR start "exp_list"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:205:1: exp_list returns [ArrayList<Expression> value] : (|e= exp ( ',' e= exp )* );
	public final ArrayList<Expression> exp_list() throws RecognitionException {
		ArrayList<Expression> value = null;


		Expression e =null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:206:2: (|e= exp ( ',' e= exp )* )
			int alt31=2;
			int LA31_0 = input.LA(1);
			if ( (LA31_0==11) ) {
				alt31=1;
			}
			else if ( (LA31_0==ID||LA31_0==45||LA31_0==47) ) {
				alt31=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 31, 0, input);
				throw nvae;
			}

			switch (alt31) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:206:4: 
					{
					value = new ArrayList<Expression>();
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:207:4: e= exp ( ',' e= exp )*
					{
					pushFollow(FOLLOW_exp_in_exp_list1573);
					e=exp();
					state._fsp--;

					value = new ArrayList<Expression>(); value.add(e);
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:207:67: ( ',' e= exp )*
					loop30:
					while (true) {
						int alt30=2;
						int LA30_0 = input.LA(1);
						if ( (LA30_0==14) ) {
							alt30=1;
						}

						switch (alt30) {
						case 1 :
							// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:207:68: ',' e= exp
							{
							match(input,14,FOLLOW_14_in_exp_list1578); 
							pushFollow(FOLLOW_exp_in_exp_list1582);
							e=exp();
							state._fsp--;

							value.add(e);
							}
							break;

						default :
							break loop30;
						}
					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "exp_list"



	// $ANTLR start "id_list"
	// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:211:1: id_list returns [ArrayList<String> value] : (|id1= ID ( ',' id2= ID )* );
	public final ArrayList<String> id_list() throws RecognitionException {
		ArrayList<String> value = null;


		Token id1=null;
		Token id2=null;

		try {
			// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:212:2: (|id1= ID ( ',' id2= ID )* )
			int alt33=2;
			int LA33_0 = input.LA(1);
			if ( (LA33_0==11||LA33_0==15) ) {
				alt33=1;
			}
			else if ( (LA33_0==ID) ) {
				alt33=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 33, 0, input);
				throw nvae;
			}

			switch (alt33) {
				case 1 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:212:4: 
					{
					value = new ArrayList<String>(); 
					}
					break;
				case 2 :
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:213:4: id1= ID ( ',' id2= ID )*
					{
					id1=(Token)match(input,ID,FOLLOW_ID_in_id_list1615); 
					value = new ArrayList<String>(); value.add(id1.getText());
					// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:214:4: ( ',' id2= ID )*
					loop32:
					while (true) {
						int alt32=2;
						int LA32_0 = input.LA(1);
						if ( (LA32_0==14) ) {
							alt32=1;
						}

						switch (alt32) {
						case 1 :
							// /Users/lixm/ecworkspace/DQC/src/parsing/DQC.g:214:5: ',' id2= ID
							{
							match(input,14,FOLLOW_14_in_id_list1624); 
							id2=(Token)match(input,ID,FOLLOW_ID_in_id_list1630); 
							value.add(id2.getText());
							}
							break;

						default :
							break loop32;
						}
					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return value;
	}
	// $ANTLR end "id_list"

	// Delegated rules


	protected DFA17 dfa17 = new DFA17(this);
	static final String DFA17_eotS =
		"\21\uffff";
	static final String DFA17_eofS =
		"\21\uffff";
	static final String DFA17_minS =
		"\1\4\1\uffff\1\4\2\uffff\1\7\5\uffff\2\4\1\12\1\uffff\1\4\1\12";
	static final String DFA17_maxS =
		"\1\50\1\uffff\1\54\2\uffff\1\26\5\uffff\1\57\1\64\1\16\1\uffff\1\57\1"+
		"\16";
	static final String DFA17_acceptS =
		"\1\uffff\1\1\1\uffff\1\3\1\4\1\uffff\1\5\1\6\1\7\1\2\1\11\3\uffff\1\10"+
		"\2\uffff";
	static final String DFA17_specialS =
		"\21\uffff}>";
	static final String[] DFA17_transitionS = {
			"\1\5\4\uffff\1\6\1\2\1\uffff\1\6\4\uffff\1\1\12\uffff\1\6\1\uffff\1\10"+
			"\1\uffff\1\6\1\7\1\uffff\1\4\2\uffff\1\6\1\uffff\1\3",
			"",
			"\1\12\4\uffff\2\12\1\uffff\1\12\4\uffff\1\12\12\uffff\1\12\1\uffff\1"+
			"\12\1\uffff\2\12\1\uffff\1\12\2\uffff\1\12\1\uffff\1\12\3\uffff\1\11",
			"",
			"",
			"\1\6\2\uffff\1\13\13\uffff\1\6",
			"",
			"",
			"",
			"",
			"",
			"\1\15\6\uffff\1\14\1\6\17\uffff\1\6\11\uffff\1\6\6\uffff\1\16\1\uffff"+
			"\1\16",
			"\1\16\2\uffff\1\6\3\uffff\1\16\12\uffff\1\6\16\uffff\1\16\3\uffff\1"+
			"\16\12\uffff\1\16",
			"\1\6\1\14\2\uffff\1\17",
			"",
			"\1\20\7\uffff\1\6\17\uffff\1\6\11\uffff\1\6\6\uffff\1\16\1\uffff\1\16",
			"\1\6\1\14\2\uffff\1\17"
	};

	static final short[] DFA17_eot = DFA.unpackEncodedString(DFA17_eotS);
	static final short[] DFA17_eof = DFA.unpackEncodedString(DFA17_eofS);
	static final char[] DFA17_min = DFA.unpackEncodedStringToUnsignedChars(DFA17_minS);
	static final char[] DFA17_max = DFA.unpackEncodedStringToUnsignedChars(DFA17_maxS);
	static final short[] DFA17_accept = DFA.unpackEncodedString(DFA17_acceptS);
	static final short[] DFA17_special = DFA.unpackEncodedString(DFA17_specialS);
	static final short[][] DFA17_transition;

	static {
		int numStates = DFA17_transitionS.length;
		DFA17_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA17_transition[i] = DFA.unpackEncodedString(DFA17_transitionS[i]);
		}
	}

	protected class DFA17 extends DFA {

		public DFA17(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 17;
			this.eot = DFA17_eot;
			this.eof = DFA17_eof;
			this.min = DFA17_min;
			this.max = DFA17_max;
			this.accept = DFA17_accept;
			this.special = DFA17_special;
			this.transition = DFA17_transition;
		}
		@Override
		public String getDescription() {
			return "122:1: process returns [Process value] : ( '0' | '(' 'new' ID ':' typ= tp ')' '(' p= parallel_process ')' | 'go' '(' t= term ')' '.' p= parallel_process | 'dummy' '(' p= parallel_process ')' |b= binder '.' p= parallel_process | 'case' e= exp 'of' 'some' '(' ID ')' ':' p1= parallel_process 'else' p2= parallel_process | 'acts_for' '(' t1= term ',' t2= term ')' ':' p1= parallel_process 'else' p2= parallel_process | ID '(' el= exp_list ')' | '(' p= parallel_process ')' );";
		}
	}

	public static final BitSet FOLLOW_34_in_system47 = new BitSet(new long[]{0x0000020000000010L});
	public static final BitSet FOLLOW_procedure_def_in_system56 = new BitSet(new long[]{0x0000020000000010L});
	public static final BitSet FOLLOW_41_in_system62 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_parallel_network_in_system68 = new BitSet(new long[]{0x0001000000000000L});
	public static final BitSet FOLLOW_48_in_system70 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_system72 = new BitSet(new long[]{0x0000000000000810L});
	public static final BitSet FOLLOW_idtp_list_in_system78 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_system80 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_14_in_system82 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_system84 = new BitSet(new long[]{0x0000000000000810L});
	public static final BitSet FOLLOW_id_list_in_system86 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_system88 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_50_in_system97 = new BitSet(new long[]{0x0002000000000010L});
	public static final BitSet FOLLOW_af_list_in_system103 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_49_in_system111 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_fun_sig_def_in_system115 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_19_in_system125 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_fun_sig_def_in_system129 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_EOF_in_system146 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_fun_sig_def166 = new BitSet(new long[]{0x0000000000040000L});
	public static final BitSet FOLLOW_18_in_fun_sig_def168 = new BitSet(new long[]{0x000000000F000000L});
	public static final BitSet FOLLOW_srt_in_fun_sig_def172 = new BitSet(new long[]{0x000000000000C000L});
	public static final BitSet FOLLOW_14_in_fun_sig_def187 = new BitSet(new long[]{0x000000000F000000L});
	public static final BitSet FOLLOW_srt_in_fun_sig_def191 = new BitSet(new long[]{0x000000000000C000L});
	public static final BitSet FOLLOW_15_in_fun_sig_def197 = new BitSet(new long[]{0x000000000F000000L});
	public static final BitSet FOLLOW_srt_in_fun_sig_def201 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_43_in_fun_sig_def215 = new BitSet(new long[]{0x0000000000008010L});
	public static final BitSet FOLLOW_def_in_fun_sig_def219 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_id_list_in_def238 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_15_in_def240 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_def244 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_14_in_def252 = new BitSet(new long[]{0x0000000000008010L});
	public static final BitSet FOLLOW_id_list_in_def256 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_15_in_def258 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_def262 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_24_in_srt281 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_25_in_srt288 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_26_in_srt295 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_27_in_srt302 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_af_list326 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_21_in_af_list328 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_af_list334 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_14_in_af_list341 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_af_list347 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_21_in_af_list349 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_af_list355 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_ID_in_idtp_list388 = new BitSet(new long[]{0x0000000000040000L});
	public static final BitSet FOLLOW_18_in_idtp_list390 = new BitSet(new long[]{0x0000048002000000L});
	public static final BitSet FOLLOW_tp_in_idtp_list394 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_14_in_idtp_list402 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_idtp_list408 = new BitSet(new long[]{0x0000000000040000L});
	public static final BitSet FOLLOW_18_in_idtp_list410 = new BitSet(new long[]{0x0000048002000000L});
	public static final BitSet FOLLOW_tp_in_idtp_list414 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_ID_in_procedure_def443 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_comp_label_in_procedure_def447 = new BitSet(new long[]{0x0000000000800000L});
	public static final BitSet FOLLOW_23_in_procedure_def449 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_procedure_def455 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_procedure_def457 = new BitSet(new long[]{0x0000000000000810L});
	public static final BitSet FOLLOW_id_list_in_procedure_def463 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_procedure_def465 = new BitSet(new long[]{0x0000000080000000L});
	public static final BitSet FOLLOW_31_in_procedure_def467 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_procedure_def473 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_network_in_parallel_network502 = new BitSet(new long[]{0x0010000000000002L});
	public static final BitSet FOLLOW_52_in_parallel_network509 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_network_in_parallel_network515 = new BitSet(new long[]{0x0010000000000002L});
	public static final BitSet FOLLOW_10_in_network541 = new BitSet(new long[]{0x0000000000800000L});
	public static final BitSet FOLLOW_23_in_network543 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_network545 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_network547 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_network549 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_network555 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_network559 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_10_in_network564 = new BitSet(new long[]{0x0000100000000000L});
	public static final BitSet FOLLOW_44_in_network566 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_network568 = new BitSet(new long[]{0x0000000000040000L});
	public static final BitSet FOLLOW_18_in_network570 = new BitSet(new long[]{0x0000048002000000L});
	public static final BitSet FOLLOW_tp_in_network576 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_network578 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_network580 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_parallel_network_in_network586 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_network588 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_conjunction_in_comp_label613 = new BitSet(new long[]{0x0000000000002002L});
	public static final BitSet FOLLOW_13_in_comp_label618 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_label_conjunction_in_comp_label624 = new BitSet(new long[]{0x0000000000002002L});
	public static final BitSet FOLLOW_label_in_label_conjunction650 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_12_in_label_conjunction658 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_label_in_label_conjunction664 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_51_in_label689 = new BitSet(new long[]{0x0000004010001010L});
	public static final BitSet FOLLOW_term_in_label693 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_20_in_label695 = new BitSet(new long[]{0x0040004010001010L});
	public static final BitSet FOLLOW_trm_list_in_label701 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_54_in_label703 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_10_in_label713 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_comp_label_in_label719 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_label721 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_process_in_parallel_process748 = new BitSet(new long[]{0x0010000000000002L});
	public static final BitSet FOLLOW_52_in_parallel_process754 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_process_in_parallel_process760 = new BitSet(new long[]{0x0010000000000002L});
	public static final BitSet FOLLOW_17_in_process792 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_10_in_process802 = new BitSet(new long[]{0x0000100000000000L});
	public static final BitSet FOLLOW_44_in_process804 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_process806 = new BitSet(new long[]{0x0000000000040000L});
	public static final BitSet FOLLOW_18_in_process808 = new BitSet(new long[]{0x0000048002000000L});
	public static final BitSet FOLLOW_tp_in_process812 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_process814 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_process816 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_process820 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_process822 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_40_in_process835 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_process837 = new BitSet(new long[]{0x0000004010001010L});
	public static final BitSet FOLLOW_term_in_process843 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_process845 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_16_in_process847 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_process853 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_35_in_process863 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_process865 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_process871 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_process873 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_binder_in_process887 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_16_in_process889 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_process895 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_33_in_process905 = new BitSet(new long[]{0x0000A00000000010L});
	public static final BitSet FOLLOW_exp_in_process911 = new BitSet(new long[]{0x0000400000000000L});
	public static final BitSet FOLLOW_46_in_process913 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_47_in_process915 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_process917 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_process919 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_process921 = new BitSet(new long[]{0x0000000000040000L});
	public static final BitSet FOLLOW_18_in_process923 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_process929 = new BitSet(new long[]{0x0000002000000000L});
	public static final BitSet FOLLOW_37_in_process931 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_process937 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_30_in_process951 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_process953 = new BitSet(new long[]{0x0000004010001010L});
	public static final BitSet FOLLOW_term_in_process959 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_14_in_process961 = new BitSet(new long[]{0x0000004010001010L});
	public static final BitSet FOLLOW_term_in_process967 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_process968 = new BitSet(new long[]{0x0000000000040000L});
	public static final BitSet FOLLOW_18_in_process970 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_process976 = new BitSet(new long[]{0x0000002000000000L});
	public static final BitSet FOLLOW_37_in_process978 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_process982 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_process995 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_process997 = new BitSet(new long[]{0x0000A00000000810L});
	public static final BitSet FOLLOW_exp_list_in_process1003 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_process1005 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_10_in_process1015 = new BitSet(new long[]{0x0000014B50021610L});
	public static final BitSet FOLLOW_parallel_process_in_process1019 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_process1021 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_25_in_tp1047 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_39_in_tp1054 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_comp_label_in_tp1060 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_42_in_tp1067 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_comp_label_in_tp1073 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_term_in_binder1094 = new BitSet(new long[]{0x0000000000400080L});
	public static final BitSet FOLLOW_7_in_binder1098 = new BitSet(new long[]{0x0000004010001010L});
	public static final BitSet FOLLOW_term_in_binder1104 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_22_in_binder1128 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_binder1130 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_9_in_binder1139 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_28_in_binder1141 = new BitSet(new long[]{0x0000001020000420L});
	public static final BitSet FOLLOW_quality_pred_in_binder1147 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_binder1149 = new BitSet(new long[]{0x0000004110001210L});
	public static final BitSet FOLLOW_binder_list_in_binder1155 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_binder1157 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_32_in_binder1167 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_binder1169 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_comp_label_in_binder1175 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_14_in_binder1177 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_comp_label_in_binder1183 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_14_in_binder1185 = new BitSet(new long[]{0x0000004110001210L});
	public static final BitSet FOLLOW_binder_in_binder1191 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_binder1193 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_29_in_quality_pred1212 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_36_in_quality_pred1219 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_boolean_formula_in_quality_pred1230 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_and_formula_in_boolean_formula1251 = new BitSet(new long[]{0x0020000000000002L});
	public static final BitSet FOLLOW_53_in_boolean_formula1264 = new BitSet(new long[]{0x0000000000000420L});
	public static final BitSet FOLLOW_and_formula_in_boolean_formula1270 = new BitSet(new long[]{0x0020000000000002L});
	public static final BitSet FOLLOW_atom_formula_in_and_formula1295 = new BitSet(new long[]{0x0000000000000102L});
	public static final BitSet FOLLOW_8_in_and_formula1306 = new BitSet(new long[]{0x0000000000000420L});
	public static final BitSet FOLLOW_atom_formula_in_and_formula1310 = new BitSet(new long[]{0x0000000000000102L});
	public static final BitSet FOLLOW_NUM_in_atom_formula1331 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_10_in_atom_formula1338 = new BitSet(new long[]{0x0000000000000420L});
	public static final BitSet FOLLOW_boolean_formula_in_atom_formula1344 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_atom_formula1346 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_binder_in_binder_list1368 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_14_in_binder_list1373 = new BitSet(new long[]{0x0000004110001210L});
	public static final BitSet FOLLOW_binder_in_binder_list1379 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_47_in_exp1399 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_exp1401 = new BitSet(new long[]{0x0000004010001010L});
	public static final BitSet FOLLOW_term_in_exp1407 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_exp1409 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_45_in_exp1416 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_exp1423 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_term1441 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_term1448 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_term1450 = new BitSet(new long[]{0x0000004010001810L});
	public static final BitSet FOLLOW_trm_list_in_term1456 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_term1458 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_38_in_term1465 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_10_in_term1467 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_comp_label_in_term1473 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_14_in_term1475 = new BitSet(new long[]{0x0008000000000400L});
	public static final BitSet FOLLOW_comp_label_in_term1481 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_14_in_term1483 = new BitSet(new long[]{0x0000004010001010L});
	public static final BitSet FOLLOW_term_in_term1489 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_11_in_term1491 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_12_in_term1502 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_28_in_term1509 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_term_in_trm_list1535 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_14_in_trm_list1540 = new BitSet(new long[]{0x0000004010001010L});
	public static final BitSet FOLLOW_term_in_trm_list1544 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_exp_in_exp_list1573 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_14_in_exp_list1578 = new BitSet(new long[]{0x0000A00000000010L});
	public static final BitSet FOLLOW_exp_in_exp_list1582 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_ID_in_id_list1615 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_14_in_id_list1624 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ID_in_id_list1630 = new BitSet(new long[]{0x0000000000004002L});
}
